package br.com.grupo7IHC.marketsearch.adaptors;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.TextView;
import android.widget.Toast;
import br.com.grupo7IHC.marketsearch.R;
import br.com.grupo7IHC.marketsearch.dao.ListaDeComprasDao;
import br.com.grupo7IHC.marketsearch.entidades.ListaDeCompras;

// Classe do adaptor para listas.
// Sua fun��o � colocar os dados da maneira certa no adapter.
public class MyListAdaptor extends ArrayAdapter<ListaDeCompras> {
	// Contexto onde est� sendo usada esta classe.
	Context context;
	// Objeto que est� usando esta classe.
	int layoutResourceId;
	// Lista de listas de compra.
	List<ListaDeCompras> minhasListas = new ArrayList<ListaDeCompras>();
	// atributo de alerta.
	private AlertDialog alerta;
	
	// Constructor desta classe
	public MyListAdaptor(Context context, int layoutResourceId,
			ArrayList<ListaDeCompras> minhasListas) {
		super(context, layoutResourceId, minhasListas);
		this.context = context;
		this.layoutResourceId = layoutResourceId;
		this.minhasListas = minhasListas;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		View itenView = convertView;
		if (itenView == null) {
			itenView = ((Activity) context).getLayoutInflater().inflate(R.layout.item_da_lista, parent, false);
		}

		// achar o iten que ser� usada
		final ListaDeCompras ListaAtual = minhasListas.get(position);

		// preencher a lista
		TextView nomeDaLista = (TextView) itenView.findViewById(R.id.iten_da_lista_nome);
		TextView dataLista = (TextView) itenView.findViewById(R.id.iten_da_lista_data);
		TextView horaLista = (TextView) itenView.findViewById(R.id.iten_da_lista_hora);
		nomeDaLista.setText(ListaAtual.getNome().toString());
		dataLista.setText(ListaAtual.getData().toString());
		horaLista.setText(ListaAtual.getHora().toString());
		ImageView imageView = (ImageView) itenView.findViewById(R.id.iten_da_lista_me_avise);
		if (ListaAtual.getMeAvisar().equals("true")) {
			imageView.setVisibility(View.VISIBLE);
		}else{
			imageView.setVisibility(View.INVISIBLE);
		}

		// on click dos botoes
		final ImageView botao = (ImageView) itenView.findViewById(R.id.iten_da_lista_botao);
		botao.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// Creating the instance of PopupMenu
				PopupMenu popup = new PopupMenu(context, botao);
				// Inflating the Popup using xml file
				popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());
				// registering popup with OnMenuItemClickListener
				popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
					public boolean onMenuItemClick(MenuItem item) {
						if (item.getTitle().equals("Remover")) {
							alertaRemoverIten(ListaAtual);
						}else if(item.getTitle().equals("Alarme")){
							alertaAlarmeIten(ListaAtual);
						}
						return true;
					}
				});

				popup.show();// showing popup menu
			}
		});
		return itenView;
	}

	private void alertaRemoverIten(final ListaDeCompras listaAtual) {
		// Cria o gerador do AlertDialog
		AlertDialog.Builder builder = new AlertDialog.Builder(context);
		// define o titulo
		builder.setTitle("Remover lista");
		// define a mensagem
		builder.setMessage("Deseja mesmo removere esta lista?");
		// define um botão como positivo
		builder.setPositiveButton("Remover",
				new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface arg0, int arg1) {
						ListaDeComprasDao dao = new ListaDeComprasDao(getContext());
						dao.removeLista(listaAtual);
						atualizarLista();
						Toast.makeText(context, "Lista removida!", Toast.LENGTH_SHORT).show();
					}
				});
		// define um botão como negativo.
		builder.setNegativeButton("Cancelar",
				new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface arg0, int arg1) {
					}
				});
		// cria o AlertDialog
		alerta = builder.create();
		// Exibe
		alerta.show();
	}
	
	private void alertaAlarmeIten(final ListaDeCompras listaAtual) {
		// Cria o gerador do AlertDialog
		AlertDialog.Builder builder = new AlertDialog.Builder(context);
		// define o titulo
		builder.setTitle("Alarme");
		// define a mensagem
		if(listaAtual.getMeAvisar().equals("false")){
			builder.setMessage("Deseja ativar o alarme desta lista?");
		}else{
			builder.setMessage("Deseja remover o alarme desa lista?");
		}
		
		// define um botão como positivo
		builder.setPositiveButton("Sim",
				new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface arg0, int arg1) {
						ListaDeComprasDao dao = new ListaDeComprasDao(getContext());
						if(listaAtual.getMeAvisar().equals("false")){
							listaAtual.setMeAvisar("true");
						}else{
							listaAtual.setMeAvisar("false");
						}
						dao.editarLista(listaAtual);
						atualizarLista();
					}
				});
		// define um botão como negativo.
		builder.setNegativeButton("Cancelar",
				new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface arg0, int arg1) {
					}
				});
		// cria o AlertDialog
		alerta = builder.create();
		// Exibe
		alerta.show();
	}
	
	private void atualizarLista() {
		ListaDeComprasDao dao = new ListaDeComprasDao(context);
		List<ListaDeCompras> newItems = dao.getAllLista();
		minhasListas.clear();
		minhasListas.addAll(newItems);
		notifyDataSetChanged();
	}

}